package com.laowang.project.system.service.impl;

import java.util.Date;
import java.util.List;
import java.util.Objects;
import java.util.stream.Collectors;

import com.alibaba.fastjson.JSONObject;
import com.laowang.common.exception.CustomException;
import com.laowang.common.utils.DateUtils;
import com.laowang.common.utils.SecurityUtils;
import com.laowang.common.utils.StringUtils;
import com.laowang.project.system.domain.MyCyhSerialNumber;
import com.laowang.project.system.domain.WxUser;
import com.laowang.project.system.service.MyCyhSerialNumberService;
import com.laowang.project.system.service.WxUserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import com.laowang.project.system.mapper.MyCyhShopMapper;
import com.laowang.project.system.domain.MyCyhShop;
import com.laowang.project.system.service.MyCyhShopService;
import org.springframework.transaction.annotation.Transactional;
import oshi.jna.platform.mac.SystemB;

/**
 * 商家管理Service业务层处理
 *
 * @author laowang
 * @date 2023-04-18
 */
@Service
public class MyCyhShopServiceImpl implements MyCyhShopService {
    @Autowired
    private MyCyhShopMapper myCyhShopMapper;

    @Autowired
    private MyCyhSerialNumberService myCyhSerialNumberService;

    @Autowired
    private WxUserService wxUserService;

    /**
     * 查询商家管理
     *
     * @param id 商家管理ID
     * @return 商家管理
     */
    @Override
    public MyCyhShop selectMyCyhShopById(Integer id) {
        return myCyhShopMapper.selectMyCyhShopById(id);
    }

    /**
     * 查询商家管理列表
     *
     * @param myCyhShop 商家管理
     * @return 商家管理
     */
    @Override
    public List<MyCyhShop> selectMyCyhShopList(MyCyhShop myCyhShop) {
        return myCyhShopMapper.selectMyCyhShopList(myCyhShop);
    }

    /**
     * 新增商家管理
     *
     * @param myCyhShop 商家管理
     * @return 结果
     */
    @Override
    public int insertMyCyhShop(MyCyhShop myCyhShop) {
        if (Objects.isNull(myCyhShop.getCate())) {
            throw new CustomException("商家类型不能为空", 400);
        }
        //List<MyCyhSerialNumber> myCyhSerialNumbers = myCyhSerialNumberService.selectMyCyhSerialNumberList(null);
        //myCyhSerialNumbers.stream().collect(Collectors.toMap(MyCyhSerialNumber::getId,MyCyhSerialNumber::getVlaue));

        String code = myCyhShop.getCode();
        if (StringUtils.isNotEmpty(code)) {
            if (code.contains("理事商家")) {
                MyCyhSerialNumber myCyhSerialNumber = myCyhSerialNumberService.selectMyCyhSerialNumberById(1);
                Integer vlaue = myCyhSerialNumber.getVlaue();
                vlaue++;
                myCyhSerialNumber.setVlaue(vlaue);
                myCyhSerialNumberService.updateMyCyhSerialNumber(myCyhSerialNumber);

            } else if (code.contains("精选商家")) {
                MyCyhSerialNumber myCyhSerialNumber = myCyhSerialNumberService.selectMyCyhSerialNumberById(2);
                Integer vlaue = myCyhSerialNumber.getVlaue();
                vlaue++;
                myCyhSerialNumber.setVlaue(vlaue);
                myCyhSerialNumberService.updateMyCyhSerialNumber(myCyhSerialNumber);

            } else if (code.contains("联盟商家")) {
                MyCyhSerialNumber myCyhSerialNumber = myCyhSerialNumberService.selectMyCyhSerialNumberById(3);
                Integer vlaue = myCyhSerialNumber.getVlaue();
                vlaue++;
                myCyhSerialNumber.setVlaue(vlaue);
                myCyhSerialNumberService.updateMyCyhSerialNumber(myCyhSerialNumber);
            }
        }

        Integer userId = myCyhShop.getUserId();
        if (userId == null) {
            throw new CustomException("关联店铺用户参数不存在");
        }

        WxUser wxUser = wxUserService.selectWxUserById(userId);
        if (wxUser == null) {
            throw new CustomException("关联店铺用户不存在");
        }


        return myCyhShopMapper.insertMyCyhShop(myCyhShop);

    }

    /**
     * 修改商家管理
     *
     * @param myCyhShop 商家管理
     * @return 结果
     */
    @Override
    public int updateMyCyhShop(MyCyhShop myCyhShop) {
        return myCyhShopMapper.updateMyCyhShop(myCyhShop);
    }

    /**
     * 批量删除商家管理
     *
     * @param ids 需要删除的商家管理ID
     * @return 结果
     */
    @Override
    public int deleteMyCyhShopByIds(Integer[] ids) {
        return myCyhShopMapper.deleteMyCyhShopByIds(ids);
    }

    /**
     * 删除商家管理信息
     *
     * @param id 商家管理ID
     * @return 结果
     */
    @Override
    public int deleteMyCyhShopById(Integer id) {
        return myCyhShopMapper.deleteMyCyhShopById(id);
    }

    @Override
    public List<MyCyhShop> selectMyCyhShopListWeb(MyCyhShop myCyhShop) {
        return myCyhShopMapper.selectMyCyhShopListWeb(myCyhShop);
    }

    @Override
    public List<MyCyhShop> selectMyCyhShopListWebSortOne(MyCyhShop myCyhShop) {
        return myCyhShopMapper.selectMyCyhShopListWebSortOne(myCyhShop);
    }

    @Override
    public List<MyCyhShop> selectMyCyhShopListWebSortTwo(MyCyhShop myCyhShop) {
        return myCyhShopMapper.selectMyCyhShopListWebSortTwo(myCyhShop);
    }

    @Override
    public void shopEdit(MyCyhShop myCyhShop) {
        myCyhShopMapper.updateMyCyhShop(myCyhShop);
    }

    @Override
    public List<MyCyhShop> selectMyCyhShopByUserId(Integer userId) {
        return myCyhShopMapper.selectMyCyhShopByUserId(userId);
    }

    @Transactional
    @Override
    public int insertMyCyhShopWeb(MyCyhShop myCyhShop) {
        myCyhShop.setCtime(new Date());
        Integer mid = SecurityUtils.getLoginUser().getWxUser().getMid();
        myCyhShop.setUserId(mid);
        myCyhShop.setAuditStatus("1");//0待审核,1审核通过,2失败

        Integer planId = myCyhShop.getPlanId();
        if (planId.equals(1)) {

            MyCyhSerialNumber myCyhSerialNumber = myCyhSerialNumberService.selectMyCyhSerialNumberById(1);
            Integer vlaue = myCyhSerialNumber.getVlaue();
            vlaue++;
            myCyhSerialNumber.setVlaue(vlaue);
            myCyhSerialNumberService.updateMyCyhSerialNumber(myCyhSerialNumber);
            myCyhShop.setCode("联盟商家" + vlaue);
        } else if (planId.equals(2)) {

            MyCyhSerialNumber myCyhSerialNumber = myCyhSerialNumberService.selectMyCyhSerialNumberById(2);
            Integer vlaue = myCyhSerialNumber.getVlaue();
            vlaue++;
            myCyhSerialNumber.setVlaue(vlaue);
            myCyhSerialNumberService.updateMyCyhSerialNumber(myCyhSerialNumber);
            myCyhShop.setCode("精选商家" + vlaue);
        } else if (planId.equals(3)) {
            //理事商家
            MyCyhSerialNumber myCyhSerialNumber = myCyhSerialNumberService.selectMyCyhSerialNumberById(3);
            Integer vlaue = myCyhSerialNumber.getVlaue();
            vlaue++;
            myCyhSerialNumber.setVlaue(vlaue);
            myCyhSerialNumberService.updateMyCyhSerialNumber(myCyhSerialNumber);
            myCyhShop.setCode("理事商家" + vlaue);
        }else if (planId.equals(4)){

            MyCyhSerialNumber myCyhSerialNumber = myCyhSerialNumberService.selectMyCyhSerialNumberById(4);
            Integer vlaue = myCyhSerialNumber.getVlaue();
            vlaue++;
            myCyhSerialNumber.setVlaue(vlaue);
            myCyhSerialNumberService.updateMyCyhSerialNumber(myCyhSerialNumber);
            myCyhShop.setCode("副会长单位" + vlaue);
        }


        myCyhShopMapper.insertMyCyhShop(myCyhShop);
        //前端小程序发布的
        WxUser wxUser = wxUserService.selectWxUserById(mid);
        wxUser.setIsMerchant(1);
        wxUserService.updateWxUser(wxUser);
        return myCyhShop.getId();
    }
}
